package com.cms.recursoshumanos.activity.menu_comida;

import java.lang.ref.WeakReference;
import java.util.Date;
import java.util.List;

import com.example.frontendrecursoshumanos.R;
import com.cms.recursoshumanos.activity.main.MainRecursosHumanosActivity;
import com.cms.recursoshumanos.cache.MenuComidaCache;
import com.cms.recursoshumanos.cache.UserInfoCache;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.handler.ImagenesHandler;
import com.cms.recursoshumanos.handler.ListaComidaMenuActivityHandler;
import com.cms.recursoshumanos.object.Comida;
import com.cms.recursoshumanos.object.TipoMenu;
import com.cms.recursoshumanos.object.Usuario;
import com.cms.recursoshumanos.object.list.ListaComida;
import com.cms.recursoshumanos.utilities.Tool;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;

public class ListaComidaMenuActivity extends MainRecursosHumanosActivity 
{

	private static MenuAdapter adaptador;

	private static LinearLayout layout_title_menu;
	private static ListView listViewMenu;
	private static TextView tipo_menu_view;
	private static TextView fecha_menu_view;
	
	private ProgressDialog dialog;
	
	protected static ListaMenuAsync asyncListaMenuTask;
	
	private static ListaComida listado;
	private static Usuario elUsuario;
	private static TipoMenu tipo_menu;
	private static Date fecha_selec;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_lista_comida);
		elUsuario = UserInfoCache.getInstance().getUsuario();
		listado = MenuComidaCache.getInstance().getMenuComida().getListaComida();
		tipo_menu = MenuComidaCache.getInstance().getMenuComida().getTipoMenu();
		fecha_selec = MenuComidaCache.getInstance().getMenuComida().getFechaMenu();
		setCompenents();
	}
	@Override
	protected void onResume() 
	{
		super.onResume();
		if (listado == null)
		{
			goPaginaPrincipal(ListaComidaMenuActivity.this);
		}
		if (elUsuario == null)
		{
			elUsuario = UserInfoCache.getInstance().getUsuario();
		}
	}
	public void onRefreshClick(View v)
	{
		getListaMenu();
	}
	public void getListaMenu()
	{
	
		asyncListaMenuTask = new ListaMenuAsync(elUsuario,
													fecha_selec,
													tipo_menu);
		asyncListaMenuTask.execute();
		
	}
	public void setCompenents()
	{
		listViewMenu =  (ListView)  findViewById ( R.id.lvComida );
		layout_title_menu = (LinearLayout) findViewById(R.id.llTituloListaComida);
		tipo_menu_view = (TextView) layout_title_menu.findViewById(R.id.tvTipoComida);
		fecha_menu_view = (TextView) layout_title_menu.findViewById(R.id.tvFechaComida);
		
		setListadoCompleto();
		
	}
	
	public void setListadoCompleto()
	{
		tipo_menu_view.setVisibility(View.VISIBLE);
		fecha_menu_view.setVisibility(View.VISIBLE);
		tipo_menu_view.setText("Tipo: "+ MenuComidaCache.getInstance().getMenuComida().getTipoMenu().getNombreTipoMenu());
		fecha_menu_view.setText("Fecha: "+ 	Tool.getInstance().parseDateToString(MenuComidaCache.getInstance().getMenuComida().getFechaMenu(),6));
		
		adaptador = new MenuAdapter(this, listado.getListaComida());
		listViewMenu.setAdapter(adaptador);
	}
	
	
	public void goDetailComida(Comida laComida)
	{
		Intent intent = new Intent(ListaComidaMenuActivity.this, DetailComidaActivity.class);
		
		Bundle bundle = new Bundle();
		bundle.putString("id_comida", ""+ laComida.getIdComida());
		intent.putExtras(bundle);
		
		startActivity(intent);
	}
	public class MenuAdapter extends ArrayAdapter<Comida> 
	{
	    LayoutInflater mInflater ;  
	    private List<Comida> mItems ;
	    private ViewHolder holder;
	 
	    public MenuAdapter  ( Context context , List<Comida> items)  
	    {
	        super ( context, -1, items )  ;
	        this.mItems = items ;
	        this.mInflater = LayoutInflater.from(context) ;
	    }
	    
	    @ Override
	    public View getView ( final int position, View convertView, ViewGroup parent )  
	    {
	            // Inflate the custom view
	    	/*View v = listViewMenu.getChildAt(position - listViewMenu.getFirstVisiblePosition());//convertView;
	    	if ( v == null)
    		{
	    		
	    		v =   mInflater.inflate( R.layout.elementos_lista_objeto_imagen_item,null);    		
	    		v.setOnClickListener(new OnClickListener() 
	    		{
					
					@Override
					public void onClick(View v) 
					{
						goDetailComida(mItems.get(position));
						
					}
				});
		    	
	    		holder = new ViewHolder();
	    		holder.relative_nombre = (RelativeLayout) v.findViewById(R.id.rlNombreObjeto);
	    		
	    		holder.detalleComida = (TextView) holder.relative_nombre.findViewById(R.id.tvNombreDetalle);
	    		holder.nombreComida = (TextView) holder.relative_nombre.findViewById(R.id.tvNombrePrincipal);
	    		holder.imagen_foto = (ImageView) v.findViewById(R.id.ivFotoObjeto);
	    		holder.progreso = (ProgressBar) v.findViewById(R.id.pBImagen);
	    		
	    		v.setTag(holder);
	    	}
	    	else
	    	{
	    		holder = (ViewHolder) v.getTag();
	    	}
    		
	    	
    		
    		holder.nombreComida.setText(mItems.get(position).getNombreComida());
    		holder.detalleComida.setText(mItems.get(position).getTipoComida().getNombreTipoComida());
    		
    		holder.progreso.setVisibility(View.VISIBLE);
			holder.imagen_foto.setVisibility(View.INVISIBLE);
    		
    		if (holder.imagen_foto != null)
    		{
    			if (mItems.get(position).getFotoComida() == null)
    			{
    				new DownloadImageTask(ListaComidaMenuActivity.this).execute(position);
    			}
    			else
    			{
    				holder.imagen_foto.setVisibility(View.VISIBLE);
					holder.progreso.setVisibility(View.INVISIBLE);
    				holder.imagen_foto.setImageBitmap(mItems.get(position).getFotoComida());
    			}
    		}
	        return v ;*/
	    	
	    	convertView =   mInflater.inflate( R.layout.elementos_lista_objeto_imagen_item,null);    		
    		convertView.setOnClickListener(new OnClickListener() 
    		{
				
				@Override
				public void onClick(View v) 
				{
					goDetailComida(mItems.get(position));
				}
			});
	    	
	    	if (convertView.getTag() == null)
	    	{
	    		holder = new ViewHolder();
	    		
	    		holder.detalleComida = (TextView) convertView.findViewById(R.id.tvNombreDetalle);
	    		holder.nombreComida = (TextView) convertView.findViewById(R.id.tvNombrePrincipal);
	    		holder.imagen_foto = (ImageView) convertView.findViewById(R.id.ivFotoObjeto);
	    		holder.progreso = (ProgressBar) convertView.findViewById(R.id.pBImagen);
	    		holder.flag_buscar = true;

	    	}
	    	else
	    	{
	    		holder = (ViewHolder) convertView.getTag();
	    	}
    		
	    	
	    	holder.nombreComida.setText(mItems.get(position).getNombreComida());
    		holder.detalleComida.setText(mItems.get(position).getTipoComida().getNombreTipoComida());
    		
    		holder.progreso.setVisibility(View.VISIBLE);
			holder.imagen_foto.setVisibility(View.GONE);
    		
			if (holder.imagen_foto != null)
			{
				if (mItems.get(position).getFotoComida() == null)
				{
					if (holder.flag_buscar) 
					{
						holder.flag_buscar = false;
						new DownloadImageTask(ListaComidaMenuActivity.this).execute(position);
					}
				}
				else
				{
					holder.imagen_foto.setVisibility(View.VISIBLE);
					holder.progreso.setVisibility(View.GONE);
    				holder.imagen_foto.setImageBitmap(mItems.get(position).getFotoComida());
				}
			}
			convertView.setTag(holder);
	        return convertView ;
	    	
	    }
	    private class ViewHolder 
	    {  
    		TextView detalleComida;
    		TextView nombreComida;
    		ImageView imagen_foto;
    		ProgressBar progreso;
    		boolean flag_buscar;
        }
	}
	private class ListaMenuAsync extends AsyncTask<String, Void, String>
	{
		private TipoMenu tipo_menu;
		private Date fecha_seleccionada;
		
		private Usuario elUsuario;

		public  ListaMenuAsync(Usuario elUsuario, Date fecha_seleccionado, TipoMenu tipo_menu)
	    {
			this.elUsuario = elUsuario;
			this.fecha_seleccionada = fecha_seleccionado;
			this.tipo_menu = tipo_menu;
	    }
		
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(ListaComidaMenuActivity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			
			ListaComidaMenuActivityHandler handler = new ListaComidaMenuActivityHandler();
			String result = handler.getListaComidaMenu(this.elUsuario.getNombre_Usuario(), 
														this.elUsuario.getPassword(),
														fecha_seleccionada,
														tipo_menu);
			return result;
		}
		
		@Override
		public void onPostExecute(String result)
		{
			
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				listado = MenuComidaCache.getInstance().getMenuComida().getListaComida();
				setListadoCompleto();
			}
			else 
			{
				Tool.getInstance().showMessage( str_result);
			}
			dialog.cancel();
			this.cancel(true);
			
			
		}
		
	}
	private static class DownloadImageTask extends AsyncTask<Integer, Void, Bitmap> 
	{
		WeakReference<ListaComidaMenuActivity> context;
		@SuppressWarnings("unused")
		ListaComidaMenuActivity activity;
		int index;
	 
		public DownloadImageTask(ListaComidaMenuActivity activity) 
		{	
			context = new WeakReference<ListaComidaMenuActivity>(activity);
			this.activity = context.get();
		}
    	
		@Override
		protected Bitmap doInBackground(Integer... position) 
		{
			index = position[0];        	
			ImagenesHandler handler = new ImagenesHandler();
			Comida laComidaAux = (adaptador.getItem(index));
			return handler.GetImage(laComidaAux.getUrlFotoComida());
		}
		
		@Override
		protected void onPostExecute(Bitmap poster) 
		{  
			/*View itemView = null;
			ImageView itetmImageView = null;
			int index_list_v = listViewMenu.getFirstVisiblePosition();
			int index_real = index - index_list_v;
			Comida laComida = listado.getComidaAtIndex(index);
	        //agarra el listview y me devuelve el item en una posicion donde se encuentra
	        if(listViewMenu != null)
	        {
        		itemView = listViewMenu.getChildAt(index_real);
	        }
	        
	        if (itemView != null)
	        {
	        	itetmImageView = (ImageView) itemView.findViewById(R.id.ivFotoObjeto);
	        	if (itetmImageView != null)
	        	{
        			itetmImageView.setVisibility(View.VISIBLE);
	        		if(poster != null)
		        	{
	        			((ProgressBar) itemView.findViewById(R.id.pBImagen)).setVisibility(View.INVISIBLE);
	        			itetmImageView.setImageBitmap(poster);
	        			laComida.setFoto_Comida(poster);
	        			listado.actualizarComida(laComida);
	        			MenuComidaCache.getInstance().getMenuComida().getListaComida().actualizarComida(laComida);
	        				
		        	}
	        	}
	        }*/
	        
	        View itemView = null;
			ImageView itetmImageView = null;
			int index_list_v = listViewMenu.getFirstVisiblePosition();
			int index_real = index - index_list_v;
			Comida laComida = listado.getComidaAtIndex(index);
	        //agarra el listview y me devuelve el item en una posicion donde se encuentra
	        if(listViewMenu != null)
	        {
        		itemView = listViewMenu.getChildAt(index_real);
	        }
	        
	        if (poster == null)
	        {
	        	poster = BitmapFactory.decodeResource(MainRecursosHumanosActivity.getAppContext().getResources(), R.drawable.avatar_blank);
	        }
	        
	        if (itemView != null)
	        {
	        	itetmImageView = (ImageView) itemView.findViewById(R.id.ivFotoObjeto);
	        	if (itetmImageView != null)
	        	{
        			itetmImageView.setVisibility(View.VISIBLE);
	        		if(poster != null)
		        	{
	        			((ProgressBar) itemView.findViewById(R.id.pBImagen)).setVisibility(View.INVISIBLE);
	        			itetmImageView.setImageBitmap(poster);
	        			laComida.setFoto_Comida(poster);
	        			listado.actualizarComida(laComida);
	        			MenuComidaCache.getInstance().getMenuComida().getListaComida().actualizarComida(laComida);
	        				
		        	}
	        	}
	        }
	        
		}
    }
	
}
